// 引入 Koa 和相关库
const Koa = require("koa");
const Router = require("koa-router");
const cors = require("koa-cors"); // 使用 koa-cors
const bodyParser = require("koa-bodyparser"); // 引入 koa-bodyparser
const config = require("./config"); // 引入配置文件
const sequelize = require("./mysql/index"); // 引入数据库连接文件
const koaJwt = require("koa-jwt");
const userRoutes = require("./router"); // 这是路由文件的路径
const { koaBody } = require("koa-body"); // 引入 koa-body 中间件
// 创建 Koa 应用和路由实例
const app = new Koa();
// 使用 koa-bodyparser 中间件解析请求体
app.use(bodyParser());

app.use(
  cors({
    origin: "*", // 或者指定来源
    methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
    allowedHeaders: "Content-Type, Authorization",
  })
);
// 配置 koa-jwt 中间件
// app.use(
//   koaJwt({
//     secret: config.jwtSecret,
//   }).unless({
//     path: ["/login", "/register"], // 不需要验证 token 的路由
//   })
// );
sequelize
  .sync({ force: false }) // 确保 sync 被调用
  .then(() => {
    console.log("数据库同步成功");
  })
  .catch((err) => {
    console.error("数据库同步失败:", err);
  });

app.use(userRoutes.allowedMethods()); // 确保允许的 HTTP 方法被正确处理

// app.use(
//   koaBody({
//     multipart: true, // 启用 multipart 支持
//     formidable: {
//       uploadDir: "./uploads", // 上传文件的目录
//       keepExtensions: true, // 保留文件扩展名
//     },
//   })
// );
app.use(async (ctx, next) => {
  console.log(ctx.path);
  if (ctx.path === "/admin/upload") {
    // 如果请求路径是文件上传的路径，则使用 koa-body 处理请求体
    await koaBody({
      multipart: true,
      formidable: {
        uploadDir: "./uploads",
        keepExtensions: true,
        maxFileSize: 200 * 1024 * 1024,
      },
    })(ctx, next);
  } else {
    // 否则调用下一个中间件
    await next();
  }
});
// 使用路由中间件
app.use(userRoutes.routes()); // 挂载路由
// 监听端口
app.listen(config.port, () => {
  console.log(`Server is running on http://localhost:${config.port}`);
});
